package com.qf.business.system.controller;

import com.alibaba.fastjson.JSON;
import com.qf.business.system.service.RoleService;
import com.qf.data.base.r.R;
import com.qf.data.base.r.Rs;
import com.qf.data.base.utils.QfBeanUtils;
import com.qf.data.system.dto.RoleDto;
import com.qf.data.system.dto.RoleDto2;
import com.qf.data.system.entity.Role;
import com.qf.data.system.vo.input.RoleInput;
import com.qf.data.system.vo.output.RoleOutput;
import com.qf.data.system.vo.output.RoleOutput2;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * description:
 * author: Ken
 * 公众号：Java架构栈
 */
@RestController
@RequestMapping("/role")
@Slf4j
public class RoleController {

    @Autowired
    private RoleService roleService;

    /**
     * 角色列表 - 部门名称
     * @return
     */
    @RequestMapping("/list")
    public R list(){
        List<RoleDto> roleDtos = roleService.queryList();
        List<RoleOutput> roleOutputs = QfBeanUtils.listCopy(roleDtos, RoleOutput.class);
        return Rs.create(roleOutputs);
    }

    /**
     * 新增角色
     * @return
     */
    @RequestMapping("/insert")
    public R insert(@Validated RoleInput role){
        Role roleObj = QfBeanUtils.beanCopy(role, Role.class);
        roleService.save(roleObj);
        return Rs.create("succ");
    }

    /**
     * 根据角色id修改角色拥有的权限
     * @return
     */
    @RequestMapping("/updatePower")
    public R updatePowersByRid(Long rid, String pidsStr){
        log.info("根据角色id修改权限：{} - {}", rid, pidsStr);
        List<Long> pids = JSON.parseArray(pidsStr, Long.class);

        //调用service进行修改
        roleService.updatePowerByRid(rid, pids);
        return Rs.create("succ");
    }

    /**
     * 根据部门id查询出该部门下的所有角色列表
     * 并且在根据员工的id，查询出该员工拥有哪些角色
     *
     * @param depId - 部门id
     * @param empId - 职工id
     * @return
     */
    @RequestMapping("/queyrByDIdAndEId")
    public R queryRoleByDepAndEmp(Long depId, Long empId){
        List<RoleDto2> roleDto2s = roleService.queryRoleByDepAndEmp(depId, empId);
        List<RoleOutput2> outputs = QfBeanUtils.listCopy(roleDto2s, RoleOutput2.class);
        return Rs.create(outputs);
    }
}
